package com.bym.mall.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bym.mall.entity.Cart;
import com.bym.mall.form.CartAddForm;
import com.bym.mall.form.CartUpdateForm;
import com.bym.mall.vo.CartVo;
import com.bym.mall.vo.ResponseVo;

import java.util.List;

public interface ICartService extends IService<Cart> {

    /**
     * 新增购物车中的商品
     *
     * @param cartAddForm 购物车添加表单
     * @return {@link ResponseVo}<{@link CartVo}>
     */
    ResponseVo<CartVo> add(CartAddForm cartAddForm);

    /**
     * 展示购物车信息（最新）
     *
     * @return {@link ResponseVo}<{@link CartVo}>
     */
    ResponseVo<CartVo> newList();

    /**
     * 更新购物车中的商品
     *
     * @param cartUpdateForm 购物车更新表单
     * @return {@link ResponseVo}<{@link CartVo}>
     */
    ResponseVo<CartVo> update(CartUpdateForm cartUpdateForm);

    /**
     * 删除购物车中的商品
     *
     * @param productId 商品id
     * @return {@link ResponseVo}<{@link CartVo}>
     */
    ResponseVo<CartVo> delete(Integer productId);

    /**
     * 购物车商品全选中
     *
     * @return {@link ResponseVo}<{@link CartVo}>
     */
    ResponseVo<CartVo> selectAll();

    /**
     * 购物车商品全不选中
     *
     * @return {@link ResponseVo}<{@link CartVo}>
     */
    ResponseVo<CartVo> unSelectAll();

    /**
     * 购物车中商品的总和
     *
     * @return {@link ResponseVo}<{@link Integer}>
     */
    ResponseVo<Integer> sum();

    /**
     * 获取购物车商品列表
     *
     * @return {@link List}<{@link Cart}>
     */
    List<Cart> listForCart();

    /**
     * 持久化购物车
     *
     * @return {@link ResponseVo}
     */
    ResponseVo persistCart();

    /**
     * 缓存购物车
     *
     * @return {@link ResponseVo}
     */
    ResponseVo cacheCart();

    /**
     * 缓存购物车
     *
     * @param uid 用户id
     * @return {@link ResponseVo}
     */
    ResponseVo cacheCart(Integer uid);
}
